package sany.iec.service.ems;

import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import sany.iec.entity.IECData;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author : 托马斯
 * @Date : 2025/7/2 11:01
 * @Description :
 */
@Service
@Getter
public class EMSDataService {

    @Value("${install.sum}")
    private Double installSum;

    @Value("${iec.ems.COA}")
    private Integer COA;

    private List<IECData> IEC_DATA = new ArrayList<>();

    @PostConstruct
    public void init() {
        IEC_DATA.add(IECData.builder().type("yx").iecType("M_SP_NA").COA(COA).IOA(1).originValue(1).value(1).chazhi(0.0).key("EMSInput").build());
        IEC_DATA.add(IECData.builder().type("yx").iecType("M_SP_NA").COA(COA).IOA(2).originValue(1).value(1).chazhi(0.0).key("EMSInputAvc").build());

        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16385).originValue(installSum - 2).chazhi(0.2).key("PowerSum_RT").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16386).originValue(installSum - 1).chazhi(0.2).key("PowerTheoryS_RT").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16387).originValue(installSum - 1).chazhi(0.2).key("PowerAvailableUpperLimitS_RT").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16388).originValue(2).chazhi(0.0).key("PowerAvailableLowerLimitS_RT").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16389).originValue(installSum - 2).chazhi(0.2).key("FrmPowerTheoryAW_RT").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16390).originValue(installSum - 1).chazhi(0.2).key("PowerAvailableUpperLimitAW_RT").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16391).originValue(2).chazhi(0.0).key("PowerAvailableLowerLimitAW_RT").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16392).originValue(installSum - 8).chazhi(0.2).key("PowerLimit_FB").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16393).originValue(installSum).chazhi(0.0).key("InstalledCapacity").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16394).originValue(installSum).chazhi(0.0).key("StartupCapacity").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16395).originValue((installSum - 2) * 0.328).chazhi(0.2).key("RePowerTheoryUpperLimit").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16396).originValue((installSum - 2) * 0.328 * -1).chazhi(0.2).key("RePowerTheoryLowerLimit").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16397).originValue((installSum - 2) * 0.328).chazhi(0.2).key("RePowerSum_RT").build());
        IEC_DATA.add(IECData.builder().type("yc").iecType("M_ME_NC").COA(COA).IOA(16398).originValue((installSum - 2) * 0.328).chazhi(0.2).key("RePowerLimit_FB").build());
    }

    public Boolean updateOrigin(String key, Float value) {
        for (int i = 0; i < IEC_DATA.size(); i++) {
            if (IEC_DATA.get(i).getKey().equals(key)) {
                IEC_DATA.get(i).setOriginValue(value);
                return true;
            }
        }
        return false;
    }

    /**
     * 获取EMS的实发有功
     * @return
     */
    public Float getPowerSum_RTValue() {
        for (int i = 0; i < IEC_DATA.size(); i++) {
            if (IEC_DATA.get(i).getKey().equals("PowerSum_RT")) {
                return Float.parseFloat(IEC_DATA.get(i).getValue().toString());
            }
        }
        return installSum.floatValue() - 5.0f;
    }

    public Object getKey(String key) {
        for (int i = 0; i < IEC_DATA.size(); i++) {
            if (IEC_DATA.get(i).getKey().equals(key)) {
                return IEC_DATA.get(i).getValue();
            }
        }
        return null;
    }
}
